
#include <stdio.h>
#include <unistd.h>

// #include "ty_log.h"

// extern void func1(int index);
// extern void func2(int index);

/*
*    Function:        ConverseArrayToBeUI
*    Description:    将无符号字符数组数据转换成“大端序”整数
*    Parameter:        srcArray    --[in]    源数组数据
*                    desBeData    --[out]    目标“大端序”整数
*    Return            0    成功
*                    非0    失败
*    Note:            
*    Other:
*/
// static uint16_t ConverseArrayToBigEndian(unsigned char *srcArray)
// {
//     uint16_t desBeData;
//     desBeData = (uint16_t)(srcArray[0]<<8) + (uint16_t)srcArray[1];
//     return desBeData;
// }

// 功能块选择

#define    C_sizeof


char *myitoc(int n)
{
    char retbuf[20];
    char *ptr = NULL;
    sprintf(retbuf,"%d",n);
    ptr = retbuf;
    // return retbuf;  // 此时retbuf = NULL， 局部变量retbuf被释放
    return ptr;        // 这是OK的，ptr也是局部变量啊，为啥没有被释放，数组和指针的区别？
}

// #pragma pack(1)
typedef struct {
    unsigned short id;
    unsigned char data[0];
}FLOW_BODY_ST;
// #pragma pack()

char arr1[1] = {12};
unsigned short aa = 100;

int main(int argc, char const *argv[])
{
    // static int count = 0;
    // unsigned int i = 0;
    
    // for (i = 0; i < argc; i++)		/* echo all command-line args */
	//     printf("\nargv[%d]: %s\n", i, argv[i]);

	// for (ptr = environ; *ptr != 0; ptr++)	/* and all env strings */
	// 	printf("%s\n", *ptr);

    // char name[30] = "Write to output file\n";
    // FILE *out;
    // out = fopen("output.txt", "wb+");
    // if( out != NULL )
    // fprintf(out, "%s", name );
    // fclose(out);

    // if(myitoc(123456) == NULL){
    //     printf("myitoc return NULL\n");
    // }
    // else{
    //    printf("%s",myitoc(123456));
    // }

    // FILE *fd = freopen("test.txt","wt+",stdout);
    // if(fd == NULL){
    //     printf("file fd open is error \n");
    // }
    // // printf("printf be test.txt %d\n",i++);
    // // printf("printf be test.txt %d\n",i++);

    // for(unsigned char i = 0; i < 500; i++){
    //     printf("printf be test.txt %d\n",i);
    //     fflush(stdout);
    //     sleep(2);    
    // }

#ifdef C_sizeof
    unsigned char array1[10] = {0,1,2,3,4,5,6,7,8,9};
    unsigned short *p = array1;
    printf("sizeof(array1)=%ld\n",sizeof(array1));  // 20 数组名表征的是数组这个数据类型 2 * 10
    printf("sizeof(&array1[0])=%ld\n",sizeof(&array1[0])); // 8 &array1[0]这个变量对应的数据类型的长度，是个指针，64位系统下执行 8
    printf("sizeof(array1[0])=%ld\n",sizeof(array1[0]));   // 2 array1[0]这个变量对应的数据类型的长度，是个unsigned short变量，64位系统下执行 2
    printf("sizeof(double)=%ld\n",sizeof(double));// 8 直接判断数据类型
    printf("sizeof(1.2 + 2)=%ld\n",sizeof(1.2 + 2));// 8 不进行表达式的计算，判断表达式结果的数据类型的长度，是double
    printf("sizeof(FLOW_BODY_ST)=%ld\n",sizeof(FLOW_BODY_ST));// 8 直接判断数据类型
    unsigned char (*arr_ptr)[10] = &array1; //定义一个指向10个元素的一维数组指针，左右数据类型匹配，&array1 表示数组的地址
    unsigned char (*arr_ptr1)[10] = array1; //右边是数组第一个变量的地址，一级指针，右边是二级指针，报错 ！！
    
    printf("%d\n",array1);
    printf("0x%X\n",&array1);
    // printf("0x%16X\n",p);

    FLOW_BODY_ST body;
    printf("0x%X\n",&body.id);
    printf("0x%X\n",&body.data);
    body.data[1000] = 100;
    printf("0x%X\n",body.data);

    // const char *str = "1234567890";
    // char *p = malloc(10);
    // if(NULL == p) {
    //     return -1;
    // }
    // memset(p, 0, 10);
    // strcpy(p, str);   //strcpy 末尾结束符 \0,实际拷贝11个字节，超过申请内存大小
    // printf("p:%s",p);

    // char arr[] = {0};
    // strcpy(arr,str);  //实际分配1字节内存，越界访问

#endif

    return 0;
}
